// #include <iostream>
// #include<string>
// #include<list>
// #include<functional>
// #include <ostream>
//
// using namespace  std;
//
//
// void test_list()
// {
//     list<int> l;
//     l.push_back(1);
//     l.push_back(2);
//     //区间遍历
//     for (auto& v: l)
//     {
//         cout << v << "\t";
//     }
//     cout << endl;
//     list<int> l1 = {1,2,3};
//
//     for (list<int>::iterator iter = l.begin();iter!=l.end();iter++)
//     {
//         cout << *iter << endl;
//     }
//
//     for (list<int>::reverse_iterator iter = l.rbegin();iter!=l.rend();iter++)
//     {
//         cout << *iter << endl;
//     }
//
//     cout << l.size() << endl;
//     cout << l.empty() << endl;
//
//     //用删除的方式打印链表
//     while (!l.empty())
//     {
//         cout << l.back() << " ";
//         l.pop_back();
//     }
//
//     cout << l.size() << endl;
// }
//
// template<typename T>
// void print_list(list<T>&data)
// {
//     for (auto& v:data)
//     {
//         cout << v << "\t";
//     }
//     cout << endl;
// }
//
//
// void test_function()
// {
//
//     //排序
//     list<int> data = {1,2,4,2,4,1,53};
//     data.sort();
//     print_list(data);
//
//     data.sort(less<int>());
//     print_list(data);
//     data.sort(greater<int>());
//     print_list(data);
//
// }
// class MM
// {
// public:
//     MM(const string& name, int age)
//         : name(name),
//           age(age)
//     {
//     }
//
//     int get_age()const
//     {
//         return age;
//     }
//
//     string get_name()const
//     {
//         return name;
//     }
//
//     friend std::ostream& operator<<(std::ostream& os, const MM& obj)
//     {
//         return os
//             << "name: " << obj.name
//             << " age: " << obj.age;
//     }
//
//     // 不推荐这种方式 只能被重载一次
//     // friend bool operator<(const MM& lhs, const MM& rhs)
//     // {
//     //     if (lhs.name < rhs.name)
//     //         return true;
//     //     if (rhs.name < lhs.name)
//     //         return false;
//     //     return lhs.age < rhs.age;
//     // }
//     //
//     // friend bool operator<=(const MM& lhs, const MM& rhs)
//     // {
//     //     return !(rhs < lhs);
//     // }
//     //
//     // friend bool operator>(const MM& lhs, const MM& rhs)
//     // {
//     //     return rhs < lhs;
//     // }
//     //
//     // friend bool operator>=(const MM& lhs, const MM& rhs)
//     // {
//     //     return !(lhs < rhs);
//     // }
//
// protected:
//     string name;
//     int age;
// };
// //自己写仿函数
// struct compare_age
// {
//     bool operator()(const MM &one,const MM& two)const
//     {
//         return one.get_age()< two.get_age();
//     }
// };
//
// //仿函数 让一个类型模版函数调用的行为 函数名(参数)
// struct compare_num
// {
//     bool operator()(const MM &one,const MM& two)const
//     {
//         return one.get_name()< two.get_name();
//     }
// };
// bool compare_by_age(const MM&one,const MM&two)
// {
//     return one.get_age()<two.get_age();
// }
//
// void test_user_data()
// {
//     list<MM> mm;
//     mm.push_back(MM("小方",1));
//     mm.push_back(MM("小2",2));
//     mm.push_back(MM("小3",1));
//
//     print_list(mm);
//     mm.sort(compare_age());
//     print_list(mm);
//     mm.sort(compare_num());
//     print_list(mm);
//     // compare_age{}()
//
//     mm.sort([&](const MM&one,const MM&two){return one.get_age()< two.get_age();});
//     print_list(mm);
//     mm.sort(compare_by_age);
//     print_list(mm);
// }
//
// void erase_insert()
// {
//     list<MM> mm;
//     mm.push_back(MM("小方",1));
//     mm.push_back(MM("小2",2));
//     mm.push_back(MM("小3",1));
//     auto result = find_if(mm.begin(),mm.end(),[](const MM& mm){return mm.get_name()=="小2";});
//     if (result==mm.end())
//     {
//         cout << "未找到" << endl;
//     }
//
//     mm.insert(result,MM("xiao4",1));
//     print_list(mm);
//
//     mm.erase(result);
//     print_list(mm);
//
// }
//
//
// int main()
// {
//     // test_list();
//     // test_function();
//     // test_user_data();
//     erase_insert();
//     return 0;
// }